<?php 
/**
 * 商品控制器
 * @author 妮妮 <962611024@qq.com>
 */
class GoodsController extends AuthController{
	private $model;
	public function __init(){
	   parent::__init();
	   $this->model=K('Goods');
	}
    /**
     * 默认访问方法
     */
    public function index(){
    	//查找所有数据
    	$goodsData=$this->model->all();
		//库存
		foreach ($goodsData as $k => $v) {
			$gid=$v['gid'];
			if(K('GoodsList')->where("gid={$gid}")->find('inventory')){
				//通过框架sum求和 压入一个下标
				$goodsData[$k]['inventory']=K('GoodsList')->where("gid={$gid}")->sum('inventory');
			}else{
				//如果没有库存默认为0
				$goodsData[$k]['inventory']=0;
			}
		}
		//分配出去
		$this->assign('goodsData',$goodsData);
		//载入模板
        $this->display(); 
    }
	
	/*
	 * 添加
	 * */
	public function add(){
		//用户提交
		if(IS_POST){
			//p(Q("post."));
			if(!$this->model->addGoods()) $this->error($this->model->error);
			//添加成功
			$this->success('添加商品成功',U('index'));
		}
		//获取所属分类
		$CateData=K('Category')->all();
		//树状结构
		$CateData=Data::tree($CateData,'cname');
		//p($CateData);
		$this->assign('CateData',$CateData);
		//获取所有品牌
		$BraData=K('Brand')->all();
		//p($BraData);
		$this->assign('BraData',$BraData);
		//载入模板
	    $this->display();
	}
	//异步删除上传图片
	public function del_img(){
		$path=Q('post.path');
		unlink($path);
	}
	
	/*
	 * goos.js需要用的方法
	 * */
	public function ajaxAttr(){
		$tid=Q("post.t");
		$data=M("type_attr")->where("tid=$tid")->select();
//		p($data);die;
		$this->ajax($data);
	}
	
	/**
	 * uploadify上传的php处理方法(这是插件自带)这是列表图
	 */
    public function upload(){
        $upload = new Upload('Upload/List/' . date('y/m').'/ListImg');
        $file = $upload->upload();
        if (empty($file)){
        	//相当于 echo json_encode('上传失败');exit;
            $this->ajax('上传失败');
        } else {
        		/** $file内部就是以下这个数组
        		$file = array(
        			0 => array(
					'path' => 'Upload/Content/15/8/123981239172.jpg'	,
					'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
				 	'image' => 1
				),
			);**/
        		//上传成功，把上传好的信息返给js
            $data = $file[0];
            $this->ajax($data);
        }
    }
	
	/**
	 * uploadify上传的php处理方法(这是插件自带)这是大图
	 */
    public function upload_img(){
        $upload = new Upload('Upload/datu/' . date('y/m').'/Img');
        $file = $upload->upload();
        if (empty($file)){
        		//相当于 echo json_encode('上传失败');exit;
            $this->ajax('上传失败');
        } else {
            $data = $file[0];
			//缩略图操作
			//实例化框架中的方法
			$image=new Image;
			//压缩中图
			$midPath = dirname($data['path']) . '/mid_' . basename($data['path']);
			$image->thumb($data['path'],$midPath,400,400,2);
			
            $this->ajax($data);
        }
    }
	
	/*
	 * 修改
	 * */
	public function edit(){
		//修改***************************************************
		if(IS_POST){
			//p(Q("post."));die;
			if(!$this->model->editGoods()) $this->error($this->model->error);
			$this->success('修改成功',U('index'));
		}
		//获取旧数据***********************************************
		$gid=Q('get.gid',0,'intval');
		$oldData=M()->join('__goods__ g JOIN __goods_detail__ gd ON g.gid=gd.gid')->where("gd.gid={$gid}")->find();
		//把图片转化为数组
		$oldData['thumb']=explode(',', $oldData['thumb']);
		//p($oldData);
		//分配出去
		$this->assign('oldData',$oldData);
//		p($oldData);
		//获取所属分类
		$CateData=K('Category')->all();
		//p($CateData);
		//树状结构
		$CateData=Data::tree($CateData,'cname');
		//p($CateData);
		$this->assign('CateData',$CateData);
		//获取所有品牌
		$BraData=K('Brand')->all();
		//p($BraData);
		$this->assign('BraData',$BraData);
		
		//处理属性和规格************************************************************
		//通过get参数传过来的在index页面写的
		$tid=Q("get.tid");
		//获取旧的已选数据
		$oldType=M()->join("__goods_attr__ ga JOIN __type_attr__ ta ON ga.taid=ta.taid")->where("gid={$gid}")->all();
		//重组数组
		foreach ($oldType as $k => $v) {
			$oldType[$k]['tavalue']=explode(",", $v['tavalue']);
		}
		//重新组合成字符串
		$attr_str='';
		$spec_str='';
		//每个taid在不同的$v里，把它相连起来 因为不是数组，所有不需要implode这个方法
		foreach ($oldType as $k => $v) {
			if($v['taclass']){
				//属性赋值连等于
				$spec_str .= $v['taid'].",";
			}else{
				//规格赋值连等于
				$attr_str .= $v['taid'].",";
			}
		}
		//去掉右边逗号
		$attr_str=rtrim($attr_str,",");
		$spec_str=rtrim($spec_str,",");
		//剩下没选择的属性  必须判断 当not in 都被选上了就不走那句话
		//判断属性是否被全选
		if($attr_str){
			$attr_no=M("type_attr")->where("tid={$tid} AND taclass=0 AND taid NOT IN ({$attr_str})")->all();
			//必须重组tavalue  因为一开始是字符串，在页面的时候要循环出来，是一个数组。所有得循环出来
			foreach ($attr_no as $k => $v) {
				$attr_no[$k]['tavalue']=explode(",", $v['tavalue']);
			}
		}else{
			$attr_no=M("type_attr")->where("tid={$tid} AND taclass=0")->all();
			foreach ($attr_no as $k => $v) {
				$attr_no[$k]['tavalue']=explode(",", $v['tavalue']);
			}
		}
		//判断规格是否被全选
		if($spec_str){
			$spec_no=M("type_attr")->where("tid={$tid} AND taclass=1 AND taid NOT IN ({$spec_str})")->all();
			//必须重组tavalue  因为一开始是字符串，在页面的时候要循环出来，是一个数组。所有得循环出来
			foreach ($spec_no as $k => $v) {
				$spec_no[$k]['tavalue']=explode(",", $v['tavalue']);
			}
		}else{
			$spec_no=M("type_attr")->where("tid={$tid} AND taclass=1")->all();
			foreach ($spec_no as $k => $v) {
				$spec_no[$k]['tavalue']=explode(",", $v['tavalue']);
			}
		}
		//分配出去 属性没有选择的
		$this->assign("attr_no",$attr_no);
		//p($attr_no);
		//分配出去 规格没有选择的
		$this->assign("spec_no",$spec_no);
		//分配出去 已经选择旧的数据
		$this->assign('oldType',$oldType);
		//载入页面
	    $this->display();
	}
	/*
	 * 删除
	 * */
	public function del(){
		$gid=Q('get.gid',0,'intval');
		//删除详情表里的缩略图
		$detData=M('goods_detail')->where("gid={$gid}")->getField('thumb');
		//组合成数组
		$det=explode(',', $detData);
		//循环这个数组
		foreach ($det as $k=> $v) {
			//判断这个东西是否存在，则执行这个方法（也判断是否是一个文件）
			is_file($v) && unlink($v);
			//删除这个中图的缩略图
			$mid=dirname($v) . '/mid_' . basename($v);
			//判断这个东西是否存在，则执行这个方法（也判断是否是一个文件）
			is_file($mid) && unlink($mid);
		}
		//图片路径商品表的列表图
		$imgPath=$this->model->where("gid={$gid}")->find();
		if($imgPath['listpic']){
			unlink($imgPath['listpic']);
		}
		//查询数据库一条删掉
		$this->model->where("gid={$gid}")->delete();
		//删除商品详情表
		M('goods_attr')->where("gid={$gid}")->delete();
		//删除商品属性表
		M('goods_detail')->where("gid={$gid}")->delete();
		$this->success('删除成功',U('index'));
	}
	
 }
 
 
 
 
 
 
 
 
 
 
 





















 ?>